package re.jf.echangeur.ihm;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.ParseException;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.table.DefaultTableModel;
import javax.xml.bind.JAXBException;

import re.fr.echangeur.xml.genere.EchangeurType;
import re.jf.echangeur.utilitaire.DisqueScanner;
import re.jf.echangeur.utilitaire.LectureEcritureXml;
import re.jf.echangeur.utilitaire.XmlFilter;

import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;

import de.javasoft.plaf.synthetica.SyntheticaBlackMoonLookAndFeel;

/**
 * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
 * Builder, which is free for non-commercial use. If Jigloo is being used
 * commercially (ie, by a corporation, company or business for any purpose
 * whatever) then you should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details. Use of Jigloo implies
 * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
 * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
 * ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class NewJFrame extends javax.swing.JFrame {

  /**
   * 
   */
  private static final long serialVersionUID = 1L;

  /**
   * This method should return an instance of this class which does NOT
   * initialize it's GUI elements. This method is ONLY required by Jigloo if
   * the superclass of this class is abstract or non-public. It is not needed
   * in any other situation.
   */
  public static Object getGUIBuilderInstance() {
    return new NewJFrame(Boolean.FALSE);
  }

  /**
   * Auto-generated main method to display this JFrame
   * 
   * @throws ParseException
   * @throws UnsupportedLookAndFeelException
   */
  public static void main(String[] args) throws UnsupportedLookAndFeelException, ParseException {

    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        try {
          javax.swing.UIManager.setLookAndFeel(new SyntheticaBlackMoonLookAndFeel());
        } catch (UnsupportedLookAndFeelException e) {
          e.printStackTrace();
        } catch (ParseException e) {
          e.printStackTrace();
        }
        NewJFrame inst = new NewJFrame();
        inst.setLocationRelativeTo(null);
        inst.setVisible(true);

      }
    });

  }

  private JPanel jPanel1;
  private JButton bt_selectionRepertoire;
  private JButton bt_validerFichier;
  private JLabel jLabel_fichiertrouver;
  private JButton bt_scanner_repertoire;
  private JTable jTableListeVideo;
  private JEditorPane jEditor_fichierImporte;
  private JEditorPane jLabel_etat_fichierdedonnee;
  private JButton bt_selectionFichierDonnee;
  private JTextField jTextField_fichierdedonnees;
  private JLabel jLabel_selection_fichier_donnees;
  private JButton bt_creationNouveauFichier;
  private JPanel jPanel2;
  private JToolBar jToolBar1;
  private JFileChooser jFileChooser1;
  private JFileChooser jFileChooser2;
  private DefaultTableModel jTableListeVideoModel;
  private JTextField jTextField_repertoire;
  private JLabel jLabel1;

  public NewJFrame() {
    super();
    initGUI();
  }

  /**
   * This constructor is used by the getGUIBuilderInstance method to provide
   * an instance of this class which has not had it's GUI elements initialized
   * (ie, initGUI is not called in this constructor).
   */
  public NewJFrame(Boolean initGUI) {
    super();
  }

  private void bt_creationNouveauFichierActionPerformed(ActionEvent evt) {
    CreationFichierJFrame inst = new CreationFichierJFrame();
    inst.setLocationRelativeTo(null);
    inst.setVisible(true);
    inst.setAlwaysOnTop(true);
    inst.setParent(NewJFrame.this);
  }

  private void bt_scanner_repertoireActionPerformed(ActionEvent evt) {
    try {
      EchangeurType echangeurType = LectureEcritureXml.lecture(jTextField_fichierdedonnees.getText());
      Integer nb = new Integer(0);
      new DisqueScanner(jTextField_repertoire.getText(), echangeurType, jEditor_fichierImporte, null);
      LectureEcritureXml.ecriture(echangeurType, jTextField_fichierdedonnees.getText());
      messageSucces("Import des fichiers", nb.intValue() + " fichier(s) importé(s)");
      jEditor_fichierImporte.setText("Fichier de données sauvegardé");
    } catch (FileNotFoundException e) {
      messageDerreur("File not found", "Le fichier de données n'est pas a l'endroit indiqué");
    } catch (JAXBException e) {
      messageDerreur("Erreur de format", "Le fichier de données n'est conforme");
    } catch (IOException e) {
      messageDerreur("Erreur E/S", e.getMessage());
    }
  }

  private void bt_selectionFichierDonneeActionPerformed(ActionEvent evt) {
    JFileChooser fileChooser = getJFileChooser1();
    fileChooser.addChoosableFileFilter(new XmlFilter());
    int returnVal = fileChooser.showOpenDialog(NewJFrame.this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
      File file = fileChooser.getSelectedFile();
      jTextField_fichierdedonnees.setText(file.getAbsolutePath());
    }
  }

  private void bt_validerFichierActionPerformed(ActionEvent evt) {
    validationFichierDonnee();
  }

  private JButton getBt_creationNouveauFichier() {
    if (bt_creationNouveauFichier == null) {
      bt_creationNouveauFichier = new JButton();
      bt_creationNouveauFichier.setText("Créer fichier de données");
      bt_creationNouveauFichier.setPreferredSize(new java.awt.Dimension(180, 23));
      bt_creationNouveauFichier.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
          bt_creationNouveauFichierActionPerformed(evt);
        }
      });
    }
    return bt_creationNouveauFichier;
  }

  private JButton getBt_scanner_repertoire() {
    if (bt_scanner_repertoire == null) {
      bt_scanner_repertoire = new JButton();
      bt_scanner_repertoire.setText("Scanner le répertoire");
      bt_scanner_repertoire.setPreferredSize(new java.awt.Dimension(181, 23));
      bt_scanner_repertoire.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
          bt_scanner_repertoireActionPerformed(evt);
        }
      });
    }
    return bt_scanner_repertoire;
  }

  private JButton getBt_selectionFichierDonnee() {
    if (bt_selectionFichierDonnee == null) {
      bt_selectionFichierDonnee = new JButton();
      bt_selectionFichierDonnee.setText("...");
      bt_selectionFichierDonnee.setPreferredSize(new java.awt.Dimension(41, 27));
      bt_selectionFichierDonnee.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
          bt_selectionFichierDonneeActionPerformed(evt);
        }
      });
    }
    return bt_selectionFichierDonnee;
  }

  private JButton getBt_validerFichier() {
    if (bt_validerFichier == null) {
      bt_validerFichier = new JButton();
      bt_validerFichier.setText("Valider le fichier de données");
      bt_validerFichier.setPreferredSize(new java.awt.Dimension(179, 23));
      bt_validerFichier.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
          bt_validerFichierActionPerformed(evt);
        }
      });
    }
    return bt_validerFichier;
  }

  private JEditorPane getJEditor_fichierImporte() {
    if (jEditor_fichierImporte == null) {
      jEditor_fichierImporte = new JEditorPane();
      jEditor_fichierImporte.setPreferredSize(new java.awt.Dimension(616, 20));
    }
    return jEditor_fichierImporte;
  }

  private JFileChooser getJFileChooser1() {
    if (jFileChooser1 == null) {
      jFileChooser1 = new JFileChooser();
    }
    return jFileChooser1;
  }

  private JFileChooser getJFileChooser2() {
    if (jFileChooser2 == null) {
      jFileChooser2 = new JFileChooser();
    }
    return jFileChooser2;
  }

  private JEditorPane getJLabel_etat_fichierdedonnee() {
    if (jLabel_etat_fichierdedonnee == null) {
      jLabel_etat_fichierdedonnee = new JEditorPane();
      jLabel_etat_fichierdedonnee.setText("                                      ");
      jLabel_etat_fichierdedonnee.setPreferredSize(new java.awt.Dimension(151, 16));
      jLabel_etat_fichierdedonnee.setEditable(false);
    }
    return jLabel_etat_fichierdedonnee;
  }

  private JLabel getJLabel_fichiertrouver() {
    if (jLabel_fichiertrouver == null) {
      jLabel_fichiertrouver = new JLabel();
      jLabel_fichiertrouver.setText("Fichier importé");
      jLabel_fichiertrouver.setPreferredSize(new java.awt.Dimension(124, 16));
    }
    return jLabel_fichiertrouver;
  }

  private JLabel getJLabel_selection_fichier_donnees() {
    if (jLabel_selection_fichier_donnees == null) {
      jLabel_selection_fichier_donnees = new JLabel();
      jLabel_selection_fichier_donnees.setText("Fichier de données");
      jLabel_selection_fichier_donnees.setPreferredSize(new java.awt.Dimension(112, 16));
    }
    return jLabel_selection_fichier_donnees;
  }

  private JPanel getJPanel2() {
    if (jPanel2 == null) {
      jPanel2 = new JPanel();
    }
    return jPanel2;
  }

  private JTable getJTableListeVideo() {
    if (jTableListeVideo == null) {
      jTableListeVideoModel = new DefaultTableModel(new String[][] {}, new String[] { "Fichier",
            "Disque",
            "Proprietaire" });
      jTableListeVideo = new JTable();
      jTableListeVideo.setModel(jTableListeVideoModel);
      jTableListeVideo.setPreferredSize(new java.awt.Dimension(616, 115));

    }
    return jTableListeVideo;
  }

  private JTextField getJTextField_fichierdedonnees() {
    if (jTextField_fichierdedonnees == null) {
      jTextField_fichierdedonnees = new JTextField();
      jTextField_fichierdedonnees.setPreferredSize(new java.awt.Dimension(441, 27));
      jTextField_fichierdedonnees.addCaretListener(new CaretListener() {
        public void caretUpdate(CaretEvent evt) {
          jTextField_fichierdedonneesCaretUpdate(evt);
        }
      });
    }
    return jTextField_fichierdedonnees;
  }

  public JToolBar getJToolBar1() {
    if (jToolBar1 == null) {
      jToolBar1 = new JToolBar();
      jToolBar1.setPreferredSize(new java.awt.Dimension(525, 19));
      jToolBar1.setFloatable(false);
      jToolBar1.add(getJPanel2());
    }
    return jToolBar1;
  }

  private void initGUI() {
    try {

      setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
      {
        jPanel1 = new JPanel();
        getContentPane().add(jPanel1, BorderLayout.CENTER);
        AnchorLayout jPanel1Layout = new AnchorLayout();
        jPanel1.setLayout(jPanel1Layout);
        jPanel1.setPreferredSize(new java.awt.Dimension(640, 480));
        {
          jTextField_repertoire = new JTextField();
          jPanel1.add(getJTableListeVideo(), new AnchorConstraint(709,
            982,
            948,
            19,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getBt_scanner_repertoire(), new AnchorConstraint(526,
            302,
            573,
            19,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getJLabel_fichiertrouver(), new AnchorConstraint(596,
            213,
            630,
            19,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getJEditor_fichierImporte(), new AnchorConstraint(642,
            982,
            684,
            19,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getJLabel_etat_fichierdedonnee(), new AnchorConstraint(276,
            563,
            309,
            327,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getBt_validerFichier(), new AnchorConstraint(269,
            302,
            317,
            22,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getBt_selectionFichierDonnee(), new AnchorConstraint(180,
            966,
            236,
            902,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getJTextField_fichierdedonnees(), new AnchorConstraint(180,
            894,
            236,
            205,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getJLabel_selection_fichier_donnees(), new AnchorConstraint(186,
            194,
            219,
            19,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getBt_creationNouveauFichier(), new AnchorConstraint(26,
            303,
            73,
            22,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jPanel1.add(getJToolBar1(), new AnchorConstraint(926,
            0,
            1002,
            0,
            AnchorConstraint.ANCHOR_NONE,
            AnchorConstraint.ANCHOR_ABS,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_ABS));
          jPanel1.add(jTextField_repertoire, new AnchorConstraint(373,
            894,
            430,
            205,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jTextField_repertoire.setPreferredSize(new java.awt.Dimension(441, 27));
        }
        {
          jLabel1 = new JLabel();
          jPanel1.add(jLabel1, new AnchorConstraint(373,
            157,
            430,
            22,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          jLabel1.setText("Répertoire");
          jLabel1.setPreferredSize(new java.awt.Dimension(86, 27));
        }
        {
          bt_selectionRepertoire = new JButton();
          jPanel1.add(bt_selectionRepertoire, new AnchorConstraint(373,
            969,
            430,
            905,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL,
            AnchorConstraint.ANCHOR_REL));
          bt_selectionRepertoire.setText("...");
          bt_selectionRepertoire.setPreferredSize(new java.awt.Dimension(41, 27));
          bt_selectionRepertoire.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              jButton1ActionPerformed(evt);
            }
          });
        }
      }

      pack();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private void jButton1ActionPerformed(ActionEvent evt) {
    JFileChooser fileChooser = getJFileChooser2();
    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    int returnVal = fileChooser.showOpenDialog(NewJFrame.this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
      File file = fileChooser.getSelectedFile();
      jTextField_repertoire.setText(file.getAbsolutePath());
      System.out.println("Opening: " + file.getName());
    }
  }

  private void jTextField_fichierdedonneesCaretUpdate(CaretEvent evt) {
    System.out.println("jTextField_fichierdedonnees.caretUpdate, event=" + evt);
    validationFichierDonnee();
  }

  private void messageDerreur(String titre, String txt) {
    JOptionPane.showMessageDialog(this, txt, titre, JOptionPane.ERROR_MESSAGE);
  }

  private void messageSucces(String titre, String txt) {
    JOptionPane.showMessageDialog(this, txt, titre, JOptionPane.INFORMATION_MESSAGE);

  }

  private void validationFichierDonnee() {
    try {
      if (jTextField_fichierdedonnees.getText()
        .length() > 0) {
        File file = new File(jTextField_fichierdedonnees.getText());
        if (file.exists()) {
          if (LectureEcritureXml.valicationXml(jTextField_fichierdedonnees.getText())) {
            jLabel_etat_fichierdedonnee.setBackground(Color.GREEN);
            jLabel_etat_fichierdedonnee.setText("Fichier valide");
          } else {
            jLabel_etat_fichierdedonnee.setBackground(Color.RED);
            jLabel_etat_fichierdedonnee.setText("Fichier non valide");
          }
        } else {
          jLabel_etat_fichierdedonnee.setBackground(Color.LIGHT_GRAY);
          jLabel_etat_fichierdedonnee.setText("Pas de fichier");
        }
      } else {
        jLabel_etat_fichierdedonnee.setBackground(new java.awt.Color(234, 234, 234));
        jLabel_etat_fichierdedonnee.setText("Pas de fichier");
      }

    } catch (Exception e) {

    }
  }

}
